package com.chinawayltd.ews.sample.mapper.task;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.chinawayltd.ews.sample.model.TMateriel;
import com.chinawayltd.ews.sample.model.TTask;
import com.chinawayltd.ews.sample.model.TTemplateNode;
import com.chinawayltd.ews.sample.model.algorithm.DriverTaskVO;
import com.chinawayltd.ews.sample.model.algorithm.DriverWorkVO;
import com.chinawayltd.ews.sample.model.task.TaskBranchVO;
import com.chinawayltd.ews.sample.model.task.TaskListVO;
import com.chinawayltd.ews.sample.model.task.TaskOrderDetailVO;
import com.chinawayltd.ews.sample.model.task.TaskScreenVO;
import com.chinawayltd.ews.sample.model.task.TaskStockVO;
import com.chinawayltd.ews.sample.model.task.TaskVO;
import com.chinawayltd.ews.sample.web.query.AppGirdQuery;
import com.chinawayltd.ews.sample.web.query.DriverGirdQuery;
import com.chinawayltd.ews.sample.web.query.OrderDetailGirdQuery;
import com.chinawayltd.ews.sample.web.query.TaskGirdQuery;

/**
 * @program: greeProject
 * @description 任务管理
 * @author: chenxin
 * @create: 2018年4月16日 下午4:50:20
 */
@Mapper
public interface TaskExtendMapper {

    /**
     * 根据查询条件与分页信息查询运输任务的数据
     * @param queryParam
     * @param page
     * @return
     */
    List<TaskListVO> listTaskAndOrderByPage(TaskGirdQuery queryParam);
    /**
     * 查询过滤掉的物料信息
     * @author: chenxin
     * @date: 2018年4月18日
     * @param ids
     * @return
     */
	List<TMateriel> listMaterielNoIds(String[] ids);
   
    /**
     * 根据查询条件与分页信息查询备货指引管理的数据
     * @param queryParam
     * @param page
     * @return
     */
    List<TaskStockVO> listTaskAndOrderDetailByPage(TaskGirdQuery queryParam);
	/**
	 * 新增任务
	 * @author: chenxin
	 * @date: 2018年4月20日
	 * @param record
	 * @return
	 */
    int insert(TTask record);
    /**
     * 将未确认的任务状态改为确认状态
     * @author: chenxin
     * @date: 2018年4月23日
     * @param taskId
     */
    int updateNoConfirmStatusByPhone(Map<String, Object> map);
    /**
     * 删除订单与任务关联关系
     * @author: chenxin
     * @date: 2018年4月23日
     * @param id
     * @return
     */
	int deleteTaskAndOrderByTaskId(@Param("id")Long id);
	/**
	 * 删除任务
	 * @author: chenxin
	 * @date: 2018年4月23日
	 * @param id
	 * @return
	 */
	int deleteTask(long id);
	 /**
     * 根据查询条件与分页信息查询运输任务的数据，用于导出任务数据使用
     * @param queryParam
     * @param page
     * @return
     */
	List<Map<String, Object>> listTaskOrderExportByPage(TaskGirdQuery queryParam);
	/**
	 * 任务装货列表
	 * @author: chenxin
	 * @date: 2018年4月27日
	 * @param taskId
	 * @return
	 */
	List<TaskBranchVO> getTaskBranchList(@Param("taskId")Long taskId);
	
	/**
	 * 根据任务id查询任务和车辆实时事件
	 * @author: chenxin
	 * @date: 2018年4月28日
	 * @param taskId
	 * @return
	 */
	TaskVO getTaskVOByTaskId(@Param("taskId")Long taskId);
	
	/**
	 * 通过任务id查询物料明细
	 * @author: chenxin
	 * @date: 2018年5月2日
	 * @param orderId
	 * @return
	 */
    List<Map<String,Object>> listOrderDetailByTaskId(@Param("taskId")Long taskId);
    /**
     * 通过任务id分页查询物料明细
     * @author: chenxin
     * @date: 2018年6月30日 下午4:34:16
     * @param queryParam
     * @return
     */
    List<Map<String, Object>> listOrderDetailByPage(OrderDetailGirdQuery queryParam);
	/**
	 * app的任务列表
	 * @author: chenxin
	 * @date: 2018年5月2日
	 * @param queryParam
	 * @return
	 */
	List<TaskListVO> applistTaskByPage(AppGirdQuery queryParam);
	
	List<TaskListVO> applistCompleteTaskByPage(AppGirdQuery queryParam);
	/**
	 * 根据任务id确认任务状态
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param id
	 * @return
	 */
	int updateConfirmStatusByTaskId(Map<String, Object> map);
	
	/**
	 * 修改任务的执行状态
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param map
	 * @return
	 */
	int updateExecutStateByTaskIdAndStatus(Map<String, Object> map);
	
	/**
	 * 修改订单的生成状态
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param map
	 * @return
	 */
	int updateOrderGenerateStatusByTaskIdAndStatus(Map<String, Object> map);
	
	/**
	 * 修改订单的执行状态
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param map
	 * @return
	 */
	int updateOrderExecuteStatusByTaskIdAndStatus(Map<String, Object> map);
	
	/**查询所有未执行未生成的订单,并且根据taskId查询已关联的订单做个标识
	 * @author Fay
	 * @date 2018年5月10日 上午11:25:37
	 * @param taskId
	 * @return
	 */
	List<Map<String, Object>> selectAllOrderDetailAndSelectedOrder(Long taskId);
	
    /**
     * 查询所有任务
     * @param queryParam
     * @param page
     * @return
     */
    List<TaskListVO> listAllTaskAndOrder();
    
    /**
     * 监控大屏的任务列表
     * @param queryParam
     * @param page
     * @return
     */
    List<TaskScreenVO> listAllTaskOnScreen(TaskGirdQuery queryParam);
    
    /**
     * 监控大屏的任务列表
     * @param queryParam
     * @param page
     * @return
     */
    List<TaskScreenVO> listAllTaskOnScreenForRedis();
    /**
     * 查询所有未确认的任务
     * @author: chenxin
     * @date: 2018年5月23日 下午5:39:57
     * @param taskId
     * @return
     */
    List<TTask> getListConfirmTask(@Param("taskId")Long taskId);
    
    /**
     * 查询所有未确认任务的四级电话
     * @author: chenxin
     * @date: 2018年5月23日 下午5:41:49
     * @return
     */
    Map<String, Object> getListTaskNoAndPhone();
    
	/**获取备货信息
	 * @author Fay
	 * @date 2018年5月24日 上午10:03:59
	 * @param queryParam
	 * @return
	 */
	List<Map<String, Object>> exportTaskAndOrderDetailGirdData(TaskGirdQuery queryParam);
	
	/**查询运输任务信息
	 * @author Fay
	 * @date 2018年5月25日 上午10:03:29
	 * @param id
	 * @return
	 */
	TaskOrderDetailVO selectTaskVOByPrimaryKey(@Param("id")Long id);

	/**
	 * 根据车辆id查出对应的任务模板
	 * @param vehicleId
	 * @return
	 */
	List<TTemplateNode> selectTaskTemplateByVehicleId(Long vehicleId);
	/**
	 * 修改任务的实际开始时间
	 * @author: chenxin
	 * @date: 2018年6月1日 下午5:24:55
	 * @param map
	 */
	void updateActualStartByTaskId(Map<String, Object> map);
	/**
	 * 修改任务的实际完成时间
	 * @author: chenxin
	 * @date: 2018年6月1日 下午5:24:55
	 * @param map
	 */
	void updateActualFinishByTaskId(Map<String, Object> map);
	/**
	 * 查询司机上班数
	 * @author: chenxin
	 * @date: 2018年6月4日 下午2:17:36
	 * @param queryParam
	 * @return
	 */
	List<DriverWorkVO> driverGirdData(DriverGirdQuery queryParam);
	/**
	 * 查询该车辆的其他任务
	 * @author: chenxin
	 * @date: 2018年6月14日 下午12:59:35
	 * @param taskId
	 * @param vehicleId
	 * @return
	 */
	List<TTask> getVehicleTaskByVidAndTid(@Param("taskId")Long taskId, @Param("vehicleId")Long vehicleId);
	/**
	 * 根据任务最大的预计完成时间修改车辆自定义的车辆最早可用时间
	 * @author: chenxin
	 * @date: 2018年6月14日 下午1:15:04
	 * @param taskId
	 * @param vehicleId
	 */
	void UpdateVehicleCarvldTimeByVid(@Param("taskId")Long taskId, @Param("vehicleId")Long vehicleId);
	/**
	 * 根据任务最大的预计完成时间修改车辆自定义的车辆最早可用时间
	 * @author: chenxin
	 * @date: 2018年6月14日 下午1:15:04
	 * @param dateTime
	 * @param vehicleId
	 */
	void UpdateVehicleCarvldTimeByVidAndDate(@Param("vehicleId")Long vehicleId);
	/**
	 * 修改任务的板位数
	 * @author: chenxin
	 * @date: 2018年6月30日 下午2:51:42
	 * @param task
	 */
	void updateTaskRoutPallet(TTask task);
	/**
	 * 查询未确认没司机的任务
	 * @author: chenxin
	 * @date: 2018年7月12日 下午4:19:35
	 * @return
	 */
	List<TTask> getNoDriverTask();
	/**
	 * 查驾驶员的最早可用时间（） 任务的最晚预计完成时间-----》司机的最早可用时间   正序
	 * @author: chenxin
	 * @date: 2018年7月12日 下午4:30:40
	 * @return
	 */
	List<DriverTaskVO> driverTaskAndShfit();


}
